import pandas as pd
from fbprophet import Prophet
import numpy as np
import matplotlib.pyplot as plt

# 假设df是一个包含两列（日期ds和数值y）的数据框
# df = pd.read_csv('your_data.csv')  # 读取CSV文件，假设其格式为日期和观测值
# df['ds'] = pd.to_datetime(df['ds'])  # 确保日期列被转换为datetime类型

# 示例数据准备
data = {
    'ds': pd.date_range(start='2020-01-01', periods=365),  # 创建一个日期范围
    'y': np.random.randint(1000, 5000, size=365)  # 随机生成一些观察值
}
df = pd.DataFrame(data)

# 实例化Prophet模型
m = Prophet(yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=True)
# 训练模型
m.fit(df)
# 创建未来日期的数据框以便预测
future = m.make_future_dataframe(periods=30)  # 预测未来30天
# 进行预测
forecast = m.predict(future)
# 可视化结果
fig1 = m.plot(forecast)
ax = fig1.gca()
ax.set_title('Prophet Forecast')
# 分解预测结果（可选）
components_plot = m.plot_components(forecast)
# 保存并/或显示图形
plt.show()

# 如果需要，还可以计算预测性能指标
from sklearn.metrics import mean_squared_error
y_true = df['y'].values[-30:]  # 最后30个实际观测值
y_pred = forecast['yhat'].tail(30).values  # 对应的预测值
mse = mean_squared_error(y_true, y_pred)

print(f'Mean Squared Error (MSE): {mse}')




